package me.zhangyifeng.blog.service;

import java.util.List;

import me.zhangyifeng.blog.model.domain.Activity;
import me.zhangyifeng.blog.model.domain.User;
import me.zhangyifeng.blog.model.dto.JsonResult;

/**
 * 活动服务接口
 * 
 * @author zhangyifeng
 */
public interface ActivityService {
    
    /**
     * 获取所有活动
     * 
     * @return 活动列表
     */
    List<Activity> findAllActivities();
    
    /**
     * 根据ID获取活动信息
     * 
     * @param activityId 活动ID
     * @return 活动信息
     */
    Activity findActivityById(Integer activityId);
    
    /**
     * 获取活动信息(包含参与人数和当前用户是否参与)
     * 
     * @param activityId 活动ID
     * @param userId 当前用户ID (可为null)
     * @return 活动信息
     */
    Activity findActivityWithParticipationInfo(Integer activityId, Integer userId);
    
    /**
     * 获取活动列表(带参与信息)
     * 
     * @param userId 当前用户ID (可为null)
     * @return 活动列表
     */
    List<Activity> findAllActivitiesWithParticipationInfo(Integer userId);
    
    /**
     * 获取活动参与者列表
     * 
     * @param activityId 活动ID
     * @return 参与用户列表
     */
    List<User> findParticipantsByActivityId(Integer activityId);
    
    /**
     * 用户参与活动
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 操作结果
     */
    JsonResult joinActivity(Integer userId, Integer activityId);
    
    /**
     * 用户退出活动
     * 
     * @param userId 用户ID
     * @param activityId 活动ID
     * @return 操作结果
     */
    JsonResult quitActivity(Integer userId, Integer activityId);
    
    /**
     * 获取用户参与的活动列表
     * 
     * @param userId 用户ID
     * @return 活动列表
     */
    List<Activity> findActivitiesByUserId(Integer userId);
    
    /**
     * 创建活动
     * 
     * @param activity 活动信息
     * @return 操作结果
     */
    JsonResult createActivity(Activity activity);
    
    /**
     * 更新活动
     * 
     * @param activity 活动信息
     * @return 操作结果
     */
    JsonResult updateActivity(Activity activity);
    
    /**
     * 删除活动
     * 
     * @param activityId 活动ID
     * @return 操作结果
     */
    JsonResult deleteActivity(Integer activityId);
}
